//
//  HMHomeViewController.swift
//  Weibo
//
//  Created by 李学林 on 15/12/5.
//  Copyright © 2015年 tete. All rights reserved.
//

import UIKit
import SVProgressHUD

private let HMStatusCellIdentifier = "HMStatusCellIdentifier"

class HMHomeViewController: HMVisitorController {
    

    // 首页HMHomeViewController的模型数据
    var statusListViewModel: HMStatusListViewModel = HMStatusListViewModel()

    
    override func viewDidLoad() {
        super.viewDidLoad()

        if !userLogin {
            
            printLog(userLogin)
            printLog(visitorView)
            visitorView?.setVisitorInfo(nil, message: nil)
            return
        }
        
        setupUI()
        loadData()
        
    }

    func setupUI(){
    
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: "findFriend")
    
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "findFriend")
        
        setupTableViewCell()
    }
    
    private func setupTableViewCell(){
        // 注册cell
        tableView.registerClass(HMStatusCell.self, forCellReuseIdentifier: HMStatusCellIdentifier)
        
        // 利用约束设置cell的高度
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 300
        // 隐藏分割线
//        tableView.separatorStyle.None
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        // 设置tableview的footerView
        tableView.tableFooterView = pullUpView
        
        
        hmRefreshControl.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        tableView.addSubview(hmRefreshControl)
        
        // 测试系统的下拉刷新控件-----测试结果有bug(自己程序的问题)
//        let refreshControl = UIRefreshControl()
//        refreshControl.addTarget(self, action: "test:", forControlEvents: UIControlEvents.ValueChanged)
//        tableView.addSubview(refreshControl)
//        
//        func test(pullRefresh:UIRefreshControl){
//            printLog("下拉刷新执行")
//            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//                printLog("下拉刷新停止了")
//                pullRefresh.endRefreshing()
//            })
//        }
        
        
    }
    
    
    @objc private func findFriend(){
        let vc = HMTempViewController()
        navigationController?.pushViewController(vc, animated: true)
    }

    // 懒加载控件(下拉加载的activity控件)
    private lazy var pullUpView: UIActivityIndicatorView  = {
        
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.redColor()
        //view.startAnimating()
        return view
    }()
  //********************抄的
    private var hmRefreshControl: HMRefreshControl = HMRefreshControl()

    // 下拉刷新的提示控件搞定了
    private lazy var pullDownTipLabel: UILabel = {
        let label = UILabel()
        // 设置背景
        label.backgroundColor = UIColor.orangeColor()
        // 文字颜色以及大小以及居中
        label.textColor = UIColor.whiteColor()
        label.font = UIFont.systemFontOfSize(12)
        label.textAlignment = .Center
        // 默认隐藏
        label.hidden = true
        
        var frame = label.frame
        frame.size = CGSizeMake(SCREENW, 35)
        frame.origin.y = 64 - 35
        label.frame = frame
        
        // 添加控件
        
        return label
    }()
    //*******************************************************
}

// MARK: - talbeView的代理方法和数据源方法
extension HMHomeViewController{
    // 返回多少航
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusListViewModel.statusList?.count ?? 0
    }
    
    // 
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier(HMStatusCellIdentifier, forIndexPath: indexPath) as! HMStatusCell
            cell.statusViewModel = statusListViewModel.statusList![indexPath.row]
        
         return cell
    }
    

    
    // 这个方法是在cell将要展示的时候会加载
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
//        printLog(indexPath.row)
        
        
        //因此, 可以在这里面判断加载最后一个cell
        if !pullUpView.isAnimating() && indexPath.row == (statusListViewModel.statusList?.count)! - 1 {
            printLog("加载到最后一条数据了,第\(indexPath.row)条");
        
            pullUpView.startAnimating()
            // 加载更多数据
            loadData()
        
        }
    }

}

// MARK: -加载数据
extension HMHomeViewController {

//    private func loadData() {
//        self.statusListViewModel.loadData(pullUpView.isAnimating()){ (isSuccess,count) -> () in
//            // 回调之后无论成败都得停止转动
////            self.endlLoad()
//            if isSuccess == true {
//                self.tableView.reloadData()
//                // 根据 count 显示不同的文字
//                
//                // 如果判断到是上拉加载的话,不做显示ti的操作
//                if !self.pullUpView.isAnimating() {
//                    self.showPullDownTips(count)
//                }
//            }else{
//                SVProgressHUD.showErrorWithStatus("请求数据失败")
//            }
//            self.endlLoad()
//        }
//  
//    }
    /// 加载微博数据
    @objc private func loadData(){
        // isPullUp --> 就是代表是否是上拉加载的数据,如果是(pullUpView.isAnimating())
        statusListViewModel.loadData(pullUpView.isAnimating()) { (isSuccess, count) -> () in
            // 只要执行在这个地方,就代表数据已经请求完成(不管是否请求成功)
            // 停止 pullUpView 的动画
            if isSuccess {
                self.tableView.reloadData()
                // 根据 count 显示不同的文字
                // 如果判断到是上拉加载的话,不做显示ti的操作
                if !self.pullUpView.isAnimating() {
                    self.showPullDownTips(count)
                }
            }else {
                SVProgressHUD.showErrorWithStatus("请求失败")
            }
            self.endlLoad()
        }
    }
    // 结束刷新
    private func endlLoad(){
        pullUpView.stopAnimating()
        
        hmRefreshControl.endRefreshing()
    }
    
    
    
    
//************************抄的***************************
   
    // 显示下拉刷新的提示
    private func showPullDownTips(count: Int){
        
        // 如果当前控件正在执行动画,直接返回
        if self.pullDownTipLabel.hidden == false {
            return
        }
        
        // 判断当前控件是否被添加到指定位置
        if self.pullDownTipLabel.superview == nil {
            if let navCtrl = self.navigationController {
                navCtrl.view.insertSubview(self.pullDownTipLabel, belowSubview: navCtrl.navigationBar)
            }
        }
        
        if count == 0 {
            self.pullDownTipLabel.text = "没有微博数据"
        }else{
            self.pullDownTipLabel.text = "加载了\(count)条数据"
        }
        
        // 执行动画
        pullDownTipLabel.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.pullDownTipLabel.transform = CGAffineTransformMakeTranslation(0, self.pullDownTipLabel.frame.height)
            }) { (_) -> Void in
                
                // 停留一秒再执行另外 的一个动画
                
                UIView.animateKeyframesWithDuration(1, delay: 1, options: [], animations: { () -> Void in
                    self.pullDownTipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        self.pullDownTipLabel.hidden = true
                })
        }
    }


    
}




